【C++】动态内存分配详解(new/new[]和delete/delete[]) 您所在的位置:网站首页 new delete 【C++】动态内存分配详解(new/new[]和delete/delete[])

【C++】动态内存分配详解(new/new[]和delete/delete[])

2024-01-26 11:28| 来源: 网络整理| 查看: 265

一、为什么需要动态内存分配?

在C++程序中,所有内存需求都是在程序执行之前通过定义所需的变量来确定的。 但是可能存在程序的内存需求只能在运行时确定的情况。 例如,当需要的内存取决于用户输入。 在这些情况下,程序需要动态分配内存,C ++语言将运算符new和delete合成在一起。

(1)特点

1.C++中通过new关键字进行动态内存申请2.C++中的动态内存分配是基于类型进行的3.delete关键字用于内存释放

(2)语法

①变量申请:

Type* pointer = new Type; //... delete pointer;

  表达式用于分配内存以包含一个类型类型的单个元素。

②数组申请:

Type* pointer = new Type[N]; //... delete[] pointer;

  表示用于分配类型类型的元素的块(数组),其中N是表示这些元素的量的整数值。

Example:

int * foo; foo = new int [5];

  在这种情况下,系统为int类型的五个元素动态分配空间,并返回指向序列的第一个元素的指针,该指针被分配给foo(指针)。 因此,foo现在指向一个有效的内存块,其中包含五个int类型元素的空间。

  这里,foo是一个指针,因此,foo指向的第一个元素可以使用表达式foo [0]或表达式* foo(两者都是等价的)来访问。可以使用foo [1]或*(foo + 1)访问第二个元素,依此类推...... 

Note:

  我们程序请求的动态内存由系统从内存堆中分配。 但是,计算机内存是一种有限的资源,它可能会耗尽。 因此,无法保证所有使用operator new分配内存的请求都将由系统授予。

(3)动态内存分配Example:

#include int main() { int* p = new int; *p = 5; *p = *p + 10; printf("p = %p\n", p); printf("*p = %d\n", *p); delete p; p = new int[10]; for(int i=0; i i; p= new (nothrow) int[i]; if (p == nullptr) cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有